home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 112_01.zip / DDOCLIB < prev    next >
Text File  |  1993-06-19  |  4KB  |  281 lines

  1. #asm
  2. ;
  3. ;   Library specially tailored for Diskdoc
  4. ;
  5. ;
  6. ;Fetch a single byte from the address in HL and
  7. ; sign extend into HL
  8. CCGCHAR: MOV    A,M
  9. CCSXT:    MOV    L,A
  10.     RLC
  11.     SBB    A
  12.     MOV    H,A
  13.     RET
  14. ;Fetch a full 16-bit integer from the address in HL
  15. CCGINT: MOV    A,M
  16.     INX    H
  17.     MOV    H,M
  18.     MOV    L,A
  19.     RET
  20. ;Store a single byte from HL at the address in DE
  21. CCPCHAR: MOV    A,L
  22.     STAX    D
  23.     RET
  24. ;Store a 16-bit integer in HL at the address in DE
  25. CCPINT: MOV    A,L
  26.     STAX    D
  27.     INX    D
  28.     MOV    A,H
  29.     STAX    D
  30.     RET
  31. ;Inclusive "or" HL and DE into HL
  32. CCOR:    MOV    A,L
  33.     ORA    E
  34.     MOV    L,A
  35.     MOV    A,H
  36.     ORA    D
  37.     MOV    H,A
  38.     RET
  39. ;Exclusive "or" HL and DE into HL
  40. CCXOR:    MOV    A,L
  41.     XRA    E
  42.     MOV    L,A
  43.     MOV    A,H
  44.     XRA    D
  45.     MOV    H,A
  46.     RET
  47. ;"And" HL and DE into HL
  48. CCAND:    MOV    A,L
  49.     ANA    E
  50.     MOV    L,A
  51.     MOV    A,H
  52.     ANA    D
  53.     MOV    H,A
  54.     RET
  55. ;Test if HL = DE and set HL = 1 if true else 0
  56. CCEQ:    CALL    CCCMP
  57.     RZ
  58.     DCX    H
  59.     RET
  60. ;Test if DE ~= HL
  61. CCNE:    CALL    CCCMP
  62.     RNZ
  63.     DCX    H
  64.     RET
  65. ;Test if DE > HL (signed)
  66. CCGT:    XCHG
  67.     CALL    CCCMP
  68.     RC
  69.     DCX    H
  70.     RET
  71. ;Test if DE <= HL (signed)
  72. CCLE:    CALL    CCCMP
  73.     RZ
  74.     RC
  75.     DCX    H
  76.     RET
  77. ;Test if DE >= HL (signed)
  78. CCGE:    CALL    CCCMP
  79.     RNC
  80.     DCX    H
  81.     RET
  82. ;Test if DE < HL (signed)
  83. CCLT:    CALL    CCCMP
  84.     RC
  85.     DCX    H
  86.     RET
  87. ;Common routine to perform a signed compare
  88. ; of DE and HL
  89. ;This routine performs DE - HL and sets the conditions:
  90. ;    Carry reflects sign of difference (set means DE < HL)
  91. ;    Zero/non-zero set according to equality.
  92. CCCMP:    MOV    A,E
  93.     SUB    L
  94.     MOV    E,A
  95.     MOV    A,D
  96.     SBB    H
  97.     LXI    H,1    ;preset true condition
  98.     JM    CCCMP1
  99.     ORA    E    ;"OR" resets carry
  100.     RET
  101. CCCMP1: ORA    E
  102.     STC        ;set carry to signal minus
  103.     RET
  104. ;
  105. ;Test if DE >= HL (unsigned)
  106. CCUGE:    CALL    CCUCMP
  107.     RNC
  108.     DCX    H
  109.     RET    
  110. ;
  111. ;Test if DE < HL (unsigned)
  112. CCULT:    CALL    CCUCMP
  113.     RC
  114.     DCX    H
  115.     RET
  116. ;
  117. ;Test if DE > HL (unsigned)
  118. CCUGT:    XCHG
  119.     CALL    CCUCMP
  120.     RC
  121.     DCX    H
  122.     RET
  123. ;
  124. ;Test if DE <= HL (unsigned)
  125. CCULE:    CALL    CCUCMP
  126.     RZ
  127.     RC
  128.     DCX    H
  129.     RET
  130. ;
  131. ;Common routine to perform unsigned compare
  132. ;carry set if DE < HL
  133. ;zero/nonzero set accordingly
  134. CCUCMP: MOV    A,D
  135.     CMP    H
  136.     JNZ    $+5
  137.     MOV    A,E
  138.     CMP    L
  139.     LXI    H,1
  140.     RET
  141. ;
  142. ;Shift DE arithmetically right by HL and return in HL
  143. CCASR:    XCHG
  144.     MOV    A,H
  145.     RAL
  146.     MOV    A,H
  147.     RAR
  148.     MOV    H,A
  149.     MOV    A,L
  150.     RAR
  151.     MOV    L,A
  152.     DCR    E
  153.     JNZ    CCASR+1
  154.     RET
  155. ;Shift DE arithmetically left by HL and return in HL
  156. CCASL:    XCHG
  157.     DAD    H
  158.     DCR    E
  159.     JNZ    CCASL+1
  160.     RET
  161. ;Subtract HL from DE and return in HL
  162. CCSUB:    MOV    A,E
  163.     SUB    L
  164.     MOV    L,A
  165.     MOV    A,D
  166.     SBB    H
  167.     MOV    H,A
  168.     RET
  169. ;Form the two's complement of HL
  170. CCNEG:    CALL    CCCOM
  171.     INX    H
  172.     RET
  173. ;Form the one's complement of HL
  174. CCCOM:    MOV    A,H
  175.     CMA
  176.     MOV    H,A
  177.     MOV    A,L
  178.     CMA
  179.     MOV    L,A
  180.     RET
  181. ;Multiply DE by HL and return in HL
  182. CCMULT: MOV    B,H
  183.     MOV    C,L
  184.     LXI    H,0
  185. CCMULT1: MOV    A,C
  186.     RRC
  187.     JNC    $+4
  188.     DAD    D
  189.     XRA    A
  190.     MOV    A,B
  191.     RAR
  192.     MOV    B,A
  193.     MOV    A,C
  194.     RAR
  195.     MOV    C,A
  196.     ORA    B
  197.     RZ
  198.     XRA    A
  199.     MOV    A,E
  200.     RAL
  201.     MOV    E,A
  202.     MOV    A,D
  203.     RAL
  204.     MOV    D,A
  205.     ORA    E
  206.     RZ
  207.     JMP    CCMULT1
  208. ;Divide DE by HL and return quotient in HL, remainder in DE
  209. CCDIV:    MOV    B,H
  210.     MOV    C,L
  211.     MOV    A,D
  212.     XRA    B
  213.     PUSH    PSW
  214.     MOV    A,D
  215.     ORA    A
  216.     CM    CCDENEG
  217.     MOV    A,B
  218.     ORA    A
  219.     CM    CCBCNEG
  220.     MVI    A,16
  221.     PUSH    PSW
  222.     XCHG
  223.     LXI    D,0
  224. CCDIV1: DAD    H
  225.     CALL    CCRDEL
  226.     JZ    CCDIV2
  227.     CALL    CCCMPBCDE
  228.     JM    CCDIV2
  229.     MOV    A,L
  230.     ORI    1
  231.     MOV    L,A
  232.     MOV    A,E
  233.     SUB    C
  234.     MOV    E,A
  235.     MOV    A,D
  236.     SBB    B
  237.     MOV    D,A
  238. CCDIV2: POP    PSW
  239.     DCR    A
  240.     JZ    CCDIV3
  241.     PUSH    PSW
  242.     JMP    CCDIV1
  243. CCDIV3: POP    PSW
  244.     RP
  245.     CALL    CCDENEG
  246.     XCHG
  247.     CALL    CCDENEG
  248.     XCHG
  249.     RET
  250. CCDENEG: MOV    A,D
  251.     CMA
  252.     MOV    D,A
  253.     MOV    A,E
  254.     CMA
  255.     MOV    E,A
  256.     INX    D
  257.     RET
  258. CCBCNEG: MOV    A,B
  259.     CMA
  260.     MOV    B,A
  261.     MOV    A,C
  262.     CMA
  263.     MOV    C,A
  264.     INX    B
  265.     RET
  266. CCRDEL: MOV    A,E
  267.     RAL
  268.     MOV    E,A
  269.     MOV    A,D
  270.     RAL
  271.     MOV    D,A
  272.     ORA    E
  273.     RET
  274. CCCMPBCDE: MOV    A,E
  275.     SUB    C
  276.     MOV    A,D
  277.     SBB    B
  278.     RET
  279. ;
  280. #endasm
  281.